package org.pps.gl.server.datastore;

import java.util.List;

import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.FetchOptions;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.FilterOperator;

/**
 * Classe représentant les messages privées stockant dans le datastore.
 *
 */
public class MessagePrive {

	/**
	 * 
	 * Créer une nouveau message pour un utilisateur.
	 * 
	 * @param emailUser
	 *            : email de l'utilisateur concerné.
	 * @param date, titre, message
	 * @return la nouvelle entité crée.
	 */
	public static Entity createMessage (String destinataire, String expediteur,
			String message, String titre) {
		Entity messagePrive = new Entity("MessagePrive");
		messagePrive.setProperty("destinataire", destinataire);
		messagePrive.setProperty("expediteur", expediteur);
		messagePrive.setProperty("message", message);
		messagePrive.setProperty("titre", titre);
		
		Util.persistEntity(messagePrive);
		return messagePrive;
	}
	
	/**
	 * Récupère tous les messages d'un utilisateur.
	 * 
	 * @param emailUser
	 *            : email de l'utilisateur concerné.
	 * @return: tous les messages pour l'utilisateur.
	 */
	public static Iterable<Entity> getMessageForUser(String emailUser) {
		Query query = new Query("MessagePrive");
		query.addFilter("destinataire", FilterOperator.EQUAL, emailUser);
		List<Entity> results = Util.getDatastoreServiceInstance()
				.prepare(query).asList(FetchOptions.Builder.withDefaults());
		if (!results.isEmpty()) {
			return results;
		}
		return null;
	}
	
	/**
	 * Efface un message d'un utilisateur.
	 * 
	 * @param entity
	 *            : Entité Message à effacer.
	 */
	public static String deleteMessage(long id) {
		Key key = KeyFactory.createKey("MessagePrive", id);
		if (key != null) {
			Util.deleteEntity(key);
			return ("Message supprimé.");
		} else
			return ("Message introuvable.");
	}

	/**
	 * Efface un message d'un utilisateur.
	 * 
	 * @param entity
	 *            : Entité Message à effacer.
	 */
	public static String deleteMessage(Key key) {
		if (key != null) {
			Util.deleteEntity(key);
			return ("Message supprimé.");
		} else
			return ("Message introuvable.");
	}


	/**
	 * Récupère le destinataire pour une entité MessagePrive.
	 * 
	 * @param entity
	 * @return
	 */
	public static String getDestinataire(Entity messagePrive) {
		return (String) messagePrive.getProperty("destinataire");
	}
	
	/**
	 * Récupère l'expéditeur pour une entité MessagePrive.
	 * 
	 * @param entity
	 * @return
	 */
	public static String getExpediteur(Entity messagePrive) {
		return (String) messagePrive.getProperty("expediteur");
	}
	
	/**
	 * Récupère le titre pour une entité MessagePrive.
	 * 
	 * @param entity
	 * @return
	 */
	public static String getTitre(Entity messagePrive) {
		return (String) messagePrive.getProperty("titre");
	}
	
	/**
	 * Récupère le message pour une entité MessagePrive.
	 * 
	 * @param entity
	 * @return
	 */
	public static String getMessage(Entity messagePrive) {
		return (String) messagePrive.getProperty("message");
	}
	
	/**
	 * Retourne l'id correspondant à un message.
	 * @return
	 */
	public static long getIdMessage(Entity message){
		return message.getKey().getId();
	}
	
	
}
